package com.xyoto.community.service;

import com.xyoto.community.dto.PageDTO;
import com.xyoto.community.entity.comment.DynamicComment;
import com.xyoto.community.entity.love.DynamicLove;
import com.xyoto.community.entity.main.Dynamic;
import com.xyoto.community.entity.main.DynamicForward;
import com.xyoto.community.pojo.DynamicStatistic;
import com.xyoto.community.utils.PageUtils;
import com.xyoto.community.vo.TotalDynamicListVo;

import java.util.List;

/**
 * Author: 廖振辉
 * Date: 2021/12/2
 * Description: 动态缓存服务类
 */
public interface DynamicCacheService {

    /**
     * 根据动态id从redis中获取动态
     * @author 廖振辉
     * @param dynamicId
     * @return {@link Dynamic}
     */
    Dynamic getDynamicByDynamicId(Integer dynamicId);

    /**
     * 获取热门动态id
     * @author 廖振辉
     * @param pageDTO
     * @return {@link PageUtils< Integer>}
     */
    PageUtils<Integer> getHotDynamicIdPage(PageDTO pageDTO);

    /**
     * 从缓存中取最新的500条动态id（分页获取）
     * @author 廖振辉
     * @param pageDTO
     * @return {@link PageUtils< Integer>}
     */
    PageUtils<Integer> getTotalDynamicIdPage(PageDTO pageDTO);

    /**
     * 将动态缓存到redis
     * @author 廖振辉
     * @param dynamic
     * @return {@link }
     */
    void saveDynamic2Cache(Dynamic dynamic,Integer operateType);

    /**
     * 更新缓存中的动态
     * @author 廖振辉
     * @param dynamic
     * @return {@link }
     */
    void updateDynamicInCache(Dynamic dynamic);

    /**
     * 根据动态id拿到动态的点赞、评论、转发数
     * @author 廖振辉
     * @param dynamicId
     * @return {@link DynamicStatistic}
     */
    DynamicStatistic getDynamicStatistic(Integer dynamicId);

    /**
     * 更新缓存中的动态评论数
     * @author 廖振辉
     * @param dynamicComment
     * @return {@link}
     */
    void updateDynamicCommentCountInCache(DynamicComment dynamicComment);

    /**
     * 更新缓存中的动态点赞数
     * @author 廖振辉
     * @param dynamicLove
     * @return {@link}
     */
    void updateDynamicLoveCountInCache(DynamicLove dynamicLove);

    /**
     * 更新缓存中的动态转发数
     * @author 廖振辉
     * @param dynamicForward
     * @return {@link}
     */
    void updateDynamicForwardCountInCache(DynamicForward dynamicForward);

    /**
     * 从缓存中获取处理的动态列表信息
     * @param totalDynamicIdPage
     * @return
     */
    List<TotalDynamicListVo> getDynamicVoListFromCache(PageUtils<Integer> totalDynamicIdPage);

    /**
     * 增加缓存中动态的总数
     * @author 廖振辉
     * @param dynamic
     * @return {@link}
     */
    void updateDynamicCountInCache(Dynamic dynamic);

    /**
     * 获取全部动态的数量
     * @author 廖振辉
     * @return {@link int}
     */
    int getTotalDynamicCount();

    /**
     * 从缓存中获取话题下的动态数量
     * @author 廖振辉
     * @param topicId
     * @return {@link int}
     */
    int getTopicDynamicCount(Integer topicId);

    /**
     * 将动态保存到redis中的最新500条动态中，该接口专用于数据恢复
     * @author 廖振辉
     * @param dynamic
     * @return {@link}
     */
    void saveDynamic2LatestDynamicIdSet(Dynamic dynamic);
}
